#ifndef DSPNASM_BITTOOLS_H
#define DSPNASM_BITTOOLS_H

#include <vector>
#include <iomanip>
#include "nasm/type/type.h"

static std::vector<u8> splitI32IntoByte(u32 data, u32 numOfByte) {
    std::vector<u8> bytes;
    u8 byte = 0;
    for (u32 i = 0; i < numOfByte; ++i) {
        u32 tmp = data & 0xff;
        byte = static_cast<u8>(tmp);
        bytes.push_back(byte);
        data >>= 8;
    }
    return std::move(bytes);
}

static u32 vectorToU32(const std::vector<u8> &data) {
    u32 result = 0;
    u32 size = data.size();
    for (u32 i = 0; i < size; ++i) {
        result += (static_cast<u32>(data[i]) << i);
    }
    return result;
}

/**
 * //将int/uint转成16进制字符串
 * @param i 输入的int/uint变量
 * @return 16进制字符串
 */
template<typename T>
std::string dec2hex(T i) {
    if (i == 0) {
        return {"0X00"};
    }
    std::stringstream ioss; //定义字符串流
    std::string s_temp; //存放转化后字符
    ioss << std::setiosflags(std::ios::uppercase) << std::hex << i; //以十六制(大写)形式输出
    ioss >> s_temp;
    s_temp = "0X" + s_temp;
    return s_temp;
}

#endif //DSPNASM_BITTOOLS_H
